package com.tgu.home_action.service;

import com.tgu.home_action.pojo.*;
import com.tgu.home_action.pojo.exception.IMException;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.constraints.NotNull;
import java.io.IOException;
import java.text.ParseException;
import java.util.Map;

public interface AdminService {
    /**
     * 登录
     *
     * @param admin：管理员登录信息
     * @return token, admin
     */
    ResponseData<Admin> login(Admin admin);

    /**
     * 添加管理员
     *
     * @param adminBean ：管理员信息
     * @param admin     ：当前登录的管理员
     * @return responseData
     */
    ResponseData<Admin> addAdmin(Admin adminBean, Admin admin);

    /**
     * 获取管理员信息
     */
    ResponseData<Admin> getInfo(Admin admin);

    /**
     * 添加地域管理员
     *
     * @param adminBean：管理员信息
     * @param admin：当前登录的管理员
     * @return responseData
     */
    ResponseData<Object> addDistrictAdmin(Admin adminBean, Admin admin);

    /**
     * 修改密码
     */
    ResponseData<Object> updatePassword(@NotNull(message = "newPassword不能为空") String newPassword, @NotNull(message = "oldPassword不能为空") String oldPassword, Admin admin);

    /**
     * 删除管理员
     */
    ResponseData<Object> delete(Integer id, Admin admin);

    /**
     * 修改管理员信息
     */
    ResponseData<Object> updateAdminInfo(Admin adminBean, Admin admin);

    /**
     * 修改个人地域信息
     */
    ResponseData<Object> updatePlace(Admin adminBean, Admin admin);

    /**
     * 更新token
     */
    ResponseData<Object> refreshToken(@NotNull(message = "refreshToken不能为空") String refreshToken);

    /**
     * 修改姓名/头像
     */
    ResponseData<Object> updateInfo(Admin adminBean, Admin admin);

    /**
     * 上传图片
     */
    ResponseData<String> uploadPhoto(MultipartFile photo, Admin admin) throws IOException;


    /**
     * 分页查询管理员
     */
    ResponseData<Page<Admin>> getAdmins(Admin admin);

    /**
     * 修改下属管理的头像
     */
    ResponseData<Object> updateAdminAvatar(@NotNull(message = "id不能为空") Integer id, @NotNull(message = "avatarUrl不能为空") String avatarUrl, Admin adminUser);

    /**
     * 通过Id查询管理
     */
    ResponseData<Admin> getAdminById(Integer id);

    /**
     * 查询动态
     */
    ResponseData<Page<Dynamic>> getDynamic(Dynamic dynamic);

    /**
     * 查询团队指数
     *
     * @return
     */
    ResponseData<Map<String, Team>> getTeam(Admin admin) throws ParseException;

    /**
     * 管理员获取userSig
     */
    ResponseData<String> getUserSig(Admin admin) throws IMException;
}
